/*
 * direccionLogicaAfisica.c
 *
 *  Created on: 14/10/2011
 *      Author: root
 */

#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<math.h>
#include"./variablesGlobales.h"

void logica_a_fisica (long dirLogica,int32_t  *cilindro, int32_t  *cabeza,int32_t  *sector);

int main(){

	long direccionlogica;
	int32_t cilindro;
	int32_t cabeza;
	int32_t sector;

	printf("ingresa la cantidad de sectores x pista: ");
	scanf("%d",&numSecxPist);
	printf("\ningresa la cantidad de cabezas de lecto/escritura: ");
	scanf("%d",&numCabezas);
	printf("\ningresa la cantidad de cilindros: ");
	scanf("%d",&cilindros);

	printf("\n***Para salir ingresa un numero negativo.***\n\n");
	printf("Ingresa la direccion logica que queres tranformar a direccion fisica: ");

	scanf("%ld",&direccionlogica);

	while(direccionlogica >= 0){


		logica_a_fisica(direccionlogica,&cilindro,&cabeza,&sector);
		printf("el cilindro: %d\n",cilindro);
		printf("la cabeza : %d\n",cabeza);
		printf("el sector: %d\n",sector);
//		imprimir_direccionfisica(direccionfisica);                                                                              /*sector+(cabeza*1000)+(cilindro*100000);*/
//
		printf("ingresa una nueva direccion logica:  ");
		scanf("%ld",&direccionlogica);

	}
	printf("Fin del programa.");
	return 0;
}

void logica_a_fisica (long dirLogica,int32_t *cilindro,int32_t *cabeza,int32_t *sector){
	int32_t sectores_por_Cilindro;

	sectores_por_Cilindro=numSecxPist*numCabezas;

	(*cilindro)=(int32_t)(dirLogica/sectores_por_Cilindro);            			 /*los cilindros estan numerados de 0  a  (n-1)*/
	(*cabeza)=(int32_t)((dirLogica%sectores_por_Cilindro)/numSecxPist);			 /*las cabezas estan numeradas de 0 a (n-1)*/
	(*sector)=(int32_t)(dirLogica%sectores_por_Cilindro)%numSecxPist;            /*los sectores estan numerados de 0 a (n-1)*/
}



